#ifndef PUBLIC_H
#define PUBLIC_H
#include<unordered_map>
#include<string>
#include"abstractencryptfacade.h"
#include"encryptfacade.h"
#include"newencryptfacade.h"
#include"functional"
using namespace std;
/*unordered_map<string, function<AbstractEncryptFacade*()>> s_facade_map = 
{
    { "old", []()->AbstractEncryptFacade* {return new EncryptFacade;}},
    { "new", []()->AbstractEncryptFacade* {return new NewEncryptFacade;}}
};*/
/*unordered_map<string, function<shared_ptr<AbstractEncryptFacade>()>> s_facade_map = 
{
    { "old", []()->shared_ptr<AbstractEncryptFacade> {return make_shared<EncryptFacade>();}},
    { "new", []()->shared_ptr<AbstractEncryptFacade> {return make_shared<NewEncryptFacade>();}}
};*/
unordered_map<string, function<unique_ptr<AbstractEncryptFacade>()>> s_facade_map = 
{
    { "old", []()->unique_ptr<AbstractEncryptFacade> {return make_unique<EncryptFacade>();}},
    { "new", []()->unique_ptr<AbstractEncryptFacade> {return make_unique<NewEncryptFacade>();}}
};
#endif